package com.youzikj.wx.core.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.youzikj.wx.core.pojo.Task;

public interface TaskDao {

	/**
	 * 添加任务：需设置image_url、title、link、start_date、end_date、amount、total_num、total_amount、task_amount、platform_amount、pub（id）；调用该方法后，将自动设置id
	 * @param pojo
	 */
	void add(Task pojo);
	
	/**
	 * 保存任务-领取者关联关系
	 * @param taskId 任务ID
	 * @param subId 领取者ID
	 */
	void addTaskSub(@Param("taskId")Integer taskId, @Param("subId")Integer subId, @Param("posterUrl")String posterUrl);
	
	/**
	 * 保存任务-领取者-推广用户关联关系
	 * @param taskId 任务ID
	 * @param subId 领取者ID
	 * @param userId 推广用户ID
	 */
	void addTaskSubUser(@Param("taskId")Integer taskId, @Param("subId")Integer subId, @Param("userId")Integer userId);
	
	/**
	 * 查询任务：pub不包含taskList；subList不包含userList和redList
	 * @param taskId
	 * @return
	 */
	Task get(Integer taskId);
	
	/**
	 * 查询任务：pub不包含taskList；subList不包含userList和redList
	 * @param taskId 任务ID
	 * @param pubId 发布者ID
	 * @return
	 */
	Task getByPubId(@Param("taskId")Integer taskId, @Param("pubId")Integer pubId);
	
	/**
	 * 查询任务：pub不包含taskList；subList不包含userList和redList
	 * @param taskId 任务ID
	 * @param subId 领取者ID
	 * @return
	 */
	Task getBySubId(@Param("taskId")Integer taskId, @Param("subId")Integer subId);
	
	/**
	 * 查询过期且状态为未结束的任务：不包含pub、subList
	 * @param end_date 结束日期
	 */
	List<Task> expireTask(String end_date);
	
	/**
	 * 将任务状态改为已结束
	 * @param idList
	 */
	void finishTask(List<Integer> idList);
	
	/**
	 * 查询已结束未发送红包未结算的任务：不包含pub；subList不包含userList和redList
	 * @return
	 */
	List<Task> redTask();
	
	/**
	 * 领取者推广次数
	 * @param taskId 任务ID
	 * @param subId 领取者ID
	 * @return
	 */
	Integer subCount(@Param("taskId")Integer taskId, @Param("subId")Integer subId);
	
	/**
	 * 将红包状态改为已发送
	 * @param idList
	 */
	void finishRedState(List<Integer> idList);
	
	/**
	 * 查询已结束已发送红包未退款的任务：pub不包含taskList；subList不包含userList和redList
	 * @return
	 */
	List<Task> refundTask();
	
	/**
	 * 将退款状态改为已退款
	 * @param idList
	 */
	void finishRefundState(List<Integer> idList);
	
	/**
	 * 将任务推广数+1
	 */
	void editCurrent_num(Integer taskId);
	
	/**
	 * 查询所有任务：不包含pub、subList
	 * @return
	 */
	List<Task> all();
	
}
